#e
#Title[H_򔫁u`̔s~Ձv]
#Text[@DStage6Rs[]
#PlayLevel[Hard]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main
{

	let imgBoss=GetCurrentScriptDirectory~"img\dot_byakuren.png";
	let rank=0;
	let n=-1;

	@Initialize
	{
		MagicCircle(false);
		SetX(GetCenterX);
		SetY(GetClipMinY+120);
		SetLife(10000);
		SetTimer(120);
		SetInvincibility(75);
		SetDurableSpellCard;
		SetScore(16000000);

		LoadGraphic(imgBoss);
		LoadGraphic(GetCurrentScriptDirectory~"img\circle.png");
		LoadGraphic(GetCurrentScriptDirectory~"img\byakuren1.png");
		LoadGraphic(GetCurrentScriptDirectory~"img\byakuren2.png");
		LoadGraphic(GetCurrentScriptDirectory~"img\byakuren3.png");
		LoadGraphic(GetCurrentScriptDirectory~"img\bluecircle.png");
		SetTexture(imgBoss);
		SetGraphicRect(163,23,219,100);
		LoadUserShotData(GetCurrentScriptDirectory~"img\shot_fan.txt");

		CutIn(YOUMU,"򔫁u`̔s~Ձv",0,0,0,0,0);
		PlaySE(GetCurrentScriptDirectory~"se\don19.wav");
		SetMovePosition02(GetCenterX,GetClipMinY+120,60);

		Tmain;
	}

	@MainLoop
	{
		if(OnBomb){SetAlpha(192);}
		else
		{
			SetCollisionA(GetX,GetY,24);
			SetAlpha(255);
		}
		if(GetTimeOfPlayerInvincibility>0){SetDamageRate(20,20);}
		else{SetDamageRate(100,100);}
		if(GetTimer<33.1){rank=5;}
		else if(GetLife<3000){rank=4;}
		else if(GetLife<4000){rank=3;}
		else if(GetLife<5500){rank=2;}
		else if(GetLife<7000){rank=1;}
		else {rank=0;}
		yield;
	}

	@DrawLoop
	{
		DrawGraphic(GetX,GetY);
	}

	@Finalize
	{
		DeleteGraphic(imgBoss);
	}

	task Tmain
	{
		yield;
		Tcircle(GetX,GetY,120*60,192,true);
		Tmove;
		wait(60);
		Tsetbyakuren;
		PlaySE(GetCurrentScriptDirectory~"se\mecha04.wav");
		wait(60);
		loop
		{
			Tattack1(1);
			wait([300,250,230,200,150,150][rank]);
			Tattack2(-1);
			wait([300,250,230,200,150,150][rank]);
			Tattack2(1);
			wait([300,250,230,200,150,150][rank]);
			Tattack1(-1);
			wait([300,250,230,200,150,150][rank]);
		}
	}

	task Tattack1(dir)
	{
		Tset(GetCenterX+64,GetClipMinY+38,90,-1*dir);
		Tset(GetCenterX-64,GetClipMinY+38,90,dir);
		Tset(GetCenterX+114,GetClipMinY+174,90,dir);
		Tset(GetCenterX-114,GetClipMinY+174,90,-1*dir);
		PlaySE(GetCurrentScriptDirectory~"se\bell03.wav");
		PlaySE(GetCurrentScriptDirectory~"se\shoot13.wav");
		if(rank>n)
		{
			n=rank;
			PlaySE(GetCurrentScriptDirectory~"se\don19.wav")
		}
		wait(75);
		PlaySE(GetCurrentScriptDirectory~"se\bell03.wav");
	}

	task Tattack2(dir)
	{
		Tset(GetCenterX+64,GetClipMinY+38,atan2(GetPlayerY-(GetY-82),GetPlayerX-(GetX+64)),-1*dir);
		Tset(GetCenterX-64,GetClipMinY+38,atan2(GetPlayerY-(GetY-82),GetPlayerX-(GetX-64)),dir);
		Tset(GetCenterX+114,GetClipMinY+174,atan2(GetPlayerY-(GetY+54),GetPlayerX-(GetX+114)),dir);
		Tset(GetCenterX-114,GetClipMinY+174,atan2(GetPlayerY-(GetY+54),GetPlayerX-(GetX-114)),-1*dir);
		PlaySE(GetCurrentScriptDirectory~"se\bell03.wav");
		PlaySE(GetCurrentScriptDirectory~"se\shoot13.wav");
		if(rank>n)
		{
			n=rank;
			PlaySE(GetCurrentScriptDirectory~"se\don19.wav")
		}
		wait(75);
		PlaySE(GetCurrentScriptDirectory~"se\bell03.wav");
	}

	task Tset(x,y,angle2,dir)
	{
		let angle=rand(0,360);
		loop([24,24,26,26,26,32][rank])
		{
			Tshot(x,y,angle,angle2,dir);
			angle+=360/[24,24,26,26,26,32][rank];
		}
		bluecircle(x,y,angle2);
	}

	task Tshot(x,y,angle,angle2,dir)
	{
		let obj=Obj_Create(OBJ_SHOT);
		ObjShot_SetGraphic(obj,[94,93,91,95,89,89][rank]);
		ObjShot_SetDelay(obj,10);
		ObjShot_SetBombResist(obj,true);
		Obj_SetPosition(obj,x,y);
		Obj_SetAutoDelete(obj,false);
		Obj_SetAngle(obj,angle);
		let v=1.7;
		loop(75)
		{
			v-=0.5/75;
			Obj_SetPosition(obj,Obj_GetX(obj)+cos(angle2)*0.5,Obj_GetY(obj)+sin(angle2)*0.5);
			Obj_SetAngle(obj,angle);
			Obj_SetSpeed(obj,v);
			angle+=1.625*dir;
			yield;
		}
		Obj_SetSpeed(obj,1.2);
		loop(75)
		{
			Obj_SetPosition(obj,Obj_GetX(obj)+cos(angle2)*0.5,Obj_GetY(obj)+sin(angle2)*0.5);
			Obj_SetAngle(obj,angle);
			angle+=0.3*dir;
			yield;
		}
		loop(1050)
		{
			Obj_SetPosition(obj,Obj_GetX(obj)+cos(angle2)*0.5,Obj_GetY(obj)+sin(angle2)*0.5);
			Obj_SetAngle(obj,angle);
			angle+=0.3*dir;
			if(OnBomb){ObjShot_SetBombResist(obj,false);}
			else{ObjShot_SetBombResist(obj,true);}
			if(OnPlayerMissed&&((Obj_GetX(obj)-GetPlayerX)^2+(Obj_GetY(obj)-GetPlayerY)^2)^0.5<150){ObjShot_FadeDelete(obj);}
			yield;
		}
		Obj_Delete(obj);
	}

	task bluecircle(x,y,angle)
	{
		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj,GetCurrentScriptDirectory~"img\bluecircle.png");
		ObjEffect_SetRenderState(obj,ADD);
		ObjEffect_SetLayer(obj,1);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
		ObjEffect_CreateVertex(obj,4);
		ObjEffect_SetVertexUV(obj,0,0,0);
		ObjEffect_SetVertexUV(obj,1,802,0);
		ObjEffect_SetVertexUV(obj,2,802,802);
		ObjEffect_SetVertexUV(obj,3,0,802);
		ObjEffect_SetVertexXY(obj,0,-400,-400);
		ObjEffect_SetVertexXY(obj,1,400,-400);
		ObjEffect_SetVertexXY(obj,2,400,400);
		ObjEffect_SetVertexXY(obj,3,-400,400);
		ObjEffect_SetVertexColor(obj,0,192,255,255,255);
		ObjEffect_SetVertexColor(obj,1,192,255,255,255);
		ObjEffect_SetVertexColor(obj,2,192,255,255,255);
		ObjEffect_SetVertexColor(obj,3,192,255,255,255);
		Obj_SetPosition(obj,x,y);
		Obj_SetAngle(obj,angle);
		let scale=0;
		let obj2=Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj2,x,y);
		Obj_SetAutoDelete(obj2,false);
		Obj_SetCollisionToPlayer(obj2,false);
		ObjShot_SetDelay(obj2,10);
		ObjShot_SetBombResist(obj2,true);
		Obj_SetSpeed(obj,0.5);
		let angle2=0;
		let v=1.7;
		loop(75)
		{
			v-=0.5/75;
			scale=((Obj_GetX(obj2)-Obj_GetX(obj))^2+(Obj_GetY(obj2)-Obj_GetY(obj))^2)^0.5*2/800;
			ObjEffect_SetScale(obj,scale,scale);
			Obj_SetPosition(obj2,Obj_GetX(obj2)+cos(angle)*0.5,Obj_GetY(obj2)+sin(angle)*0.5);
			Obj_SetAngle(obj2,angle2);
			Obj_SetSpeed(obj2,v);
			angle2+=1.625;
			yield;
		}
		Obj_SetSpeed(obj2,1.2);
		loop(1125)
		{
			scale=((Obj_GetX(obj2)-Obj_GetX(obj))^2+(Obj_GetY(obj2)-Obj_GetY(obj))^2)^0.5*2/800;
			ObjEffect_SetScale(obj,scale,scale);
			Obj_SetPosition(obj2,Obj_GetX(obj2)+cos(angle)*0.5,Obj_GetY(obj2)+sin(angle)*0.5);
			Obj_SetAngle(obj2,angle2);
			angle2+=0.3;
			yield;
		}
		Obj_Delete(obj);
		Obj_Delete(obj2);
	}
	task Tmove
	{
		let s=0;
		loop
		{
			SetY(GetClipMinY+120+5*sin(s));
			s+=3.5;
			yield;
		}
	}
	#include_function ".\lib.txt"
	#include_function ".\byakuren.txt"
}
